package Implementation;

import java.util.Collection;





import java.util.Queue;

import entility.Machine;
import entility.Range;

public class UniqueInterval {
	
	@Override
	public String toString() {
		return "UniqueInterval [host=" + host + ", range=" + range + "]\n";
	}

	public Machine host;
	public Range range;
	
	public UniqueInterval(Machine host, Range range)
	{
		this.host = host;
		this.range = range;
	}

	public boolean fit(Collection<UniqueInterval> intervals) {

		for(UniqueInterval unique: intervals)
		{
			if(unique.range.contains(this.range.min) || unique.range.contains(this.range.max))
				return false;
			
		}
		return true;
		
	}
	
	public boolean hit(Collection<UniqueInterval> intervals) {

		for(UniqueInterval unique: intervals)
		{
			if(!unique.range.contains(this.range.min) || !unique.range.contains(this.range.max))
				return true;
			
		}
		return false;
		
	}

	public UniqueInterval getHit(Collection<UniqueInterval> intervals) {
		
		for(UniqueInterval unique: intervals)
		{
			if( unique.range.contains(this.range.min) && !unique.range.contains(this.range.max) && unique.range.max < this.range.max )
			{
				
				UniqueInterval inter = new UniqueInterval(host, new Range( unique.range.max, this.range.max));
				return inter;
			}
			
			
			if ( unique.range.contains(this.range.max) && !unique.range.contains(this.range.min) && this.range.min < unique.range.min )
			{
				UniqueInterval inter = new UniqueInterval(host, new Range( this.range.min, unique.range.min ));
				return inter;
			}
		}
		
		return null;
	}

	public UniqueInterval cloneUnique() {
		
		UniqueInterval unique = new UniqueInterval(host, new Range(this.range.min, this.range.max));
		
		return unique;
		
	}

	public Range getRange() {
		// TODO Auto-generated method stub
		Range r = new Range(this.range.min, this.range.max);
		return r;
	}
	
	
	
	

}
